package exception;

/**
 * java异常处理机制中的try-catch
 * 语法:
 * try{
 *     正常的代码片段 （A计划）
 * }catch(XXXException){
 *     当try中代码出现XXXException后的处理代码 （B计划）
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
//            String str = null;
//            String str = "abc";
            String str = "abcdefg";
            //JVM执行到这里是遇到了空指针会实例化该异常并将其抛出
            //如果没有异常处理机制，那么该异常会被抛出到main方法之外去处理
            //但是一旦异常抛出到main方法之外，那么程序就会停止执行
            System.out.println(str.length());
            System.out.println(str.charAt(5));
            System.out.println(Integer.parseInt(str));
            //try语句块中某句代码出现异常后，剩下的代码不会被执行
            System.out.println("!!!!!!!!");
            //try中代码不出现异常时，catch语句块是不执行的
//        }catch(NullPointerException e){
//            System.out.println("出现了空指针，并且处理完毕了");
            //catch可以定义多个，针对不同异常有不同处理方式时可以分别捕获并处理
//        }catch(StringIndexOutOfBoundsException e){
//            System.out.println("出现了字符串下标越界，并处理完毕了");
//        }
        //当多个异常具有相同处理方式时，可以合并到一个catch中处理
        }catch(NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现了空指针或下标越界，并用相同方式处理了");
        //可以捕获超类型异常，那么它的子类型异常都可以被其处理
        //如果catch的异常存在继承关系，那么子类型异常在上先捕获，超类型异常在下后捕获
        }catch(Exception e){
            System.out.println("反正就是出了个错!");
        }
        System.out.println("程序结束了");
    }
}





